//  维护关联关系

const Student = require( './Student' );
const Course = require( './Course' );
const Score = require( './Score' );

console.log( '维护学生和课程之间的多对多关联关系' );

Student.belongsToMany( Course , { 
    // 确定在 Student实例中 Course 数组的名称
    as: 'courses' ,
    // 确定 Student 到 Course 是通过哪个模型关联起来的
    through: Score , 
    // 确定在 Score模型 对应的表中，参照我方主键的外键名称
    foreignKey: 'student_id'
});

// 上面的 belongsToMany 执行后 ， Student 原型上就存在以下方法:
// Student.prototype.hasCourse
// Student.prototype.addCourse
// Student.prototype.createCourse
// Student.prototype.removeCourse
// Student.prototype.countCourses
// Student.prototype.hasCourses
// Student.prototype.getCourses() 可以获得学生选择的所有课程
// Student.prototype.setCourses( courses ) 可以"更新"学生选择的课程
// Student.prototype.addCourses
// Student.prototype.removeCourses( courseIds ) 根据参数指定的课程编号批量删除学生选择的课程


Course.belongsToMany( Student , { 
    // 确定在 Course实例中 Student 数组的名称
    as: 'students',
    // 确定 Course 到 Student 是通过哪个模型关联起来的
    through: Score ,
    // 确定在 Score模型 对应的表中，参照我方主键的外键名称 
    foreignKey: 'course_id' 
});

// 以上 belongsToMany 执行后 ，在 Course 原型上新增了以下方法:
// Course.prototype.hasStudent
// Course.prototype.addStudent
// Course.prototype.createStudent
// Course.prototype.removeStudent
// Course.prototype.countStudents
// Course.prototype.hasStudents
// Course.prototype.getStudents
// Course.prototype.setStudents
// Course.prototype.addStudents
// Course.prototype.removeStudents